'use strict';
var cookieJs = require('@/libs/cookie');
//////////////////////////////////////////////////////////////////////////////
// ajax请求封装
// 考虑着假数据陪伴真路径
// 考虑着接口定义的成功失败的code
// 考虑着多次触发的错误避免
// 考虑代码尽可能的简单
// =====================
// ##456543##flag
// =====================
// liuyp 2019年3月27日22:46:32 promise完全化
//////////////////////////////////////////////////////////////////////////////
function $ajax($http, $alert, $globel, $mock, $power) {
    let sent = (option) => {
        option = angular.extend({}, {
            url: null,
            method: "GET",// 默认get方式请求
            params: null,
            data: null,
            dataType: 'json',
            cache: false,// get请求时候，是否开启缓存，启用缓存，AngularJS默认会使用$cacheFactory,这个服务是AngularJS在启动时自动创建的。
            timeout: 12e3// 超时时间
        }, option);
        option.method = option.method.toUpperCase();
        option.header = option.header || {};
        option.header.mid = $globel.get('MID');
        if(option.method == "POST"){
            if(option.params && ! option.data) option.data = option.params;
            option.params = null;
        }
        let control = (n) =>{
            if (window[n]) { return false; } window[n] = true;
            setTimeout(function() { window[n] = false }, 2e3);
            return true;
        };
        //////////////////////
        // 特殊设置 不走$http 全走假数据
        if( !option.real ) $http = $mock;
        //////////////////////
        return new Promise((resolve, reject) => {
            $http(option).then(( res /* 请求成功执行代码 */ ) => {
                if(res.status != 200){ throw '请求状态不对'; }
                var data = res.data || { code: 0 };
                var code = data.code || 0;
                if( !code || code == 200){ resolve(data) }
                else if (code == 401 && control('noPower')) { $alert.error('用户没有操作权限！',function(){ logout() }) }
                else if (code == 403 && control('loginOutOfTime')) { $alert.error('用户链接服务超时！',function(){ $power.reset() }) }
                else if (code == 400) { resolve({ 'res_code': 0, 'res': '内容涉及敏感词汇！'} ) }
                else if (code == 500) { resolve({ 'res_code': 0, 'res': '服务器异常，请刷新页面！'} ) }
                else { $alert.error(data.msg); }
            }).catch(( res /* 请求失败执行代码 */ ) => {
                $alert.error('请求失败！');
                console.error(res);
                reject();
            });
        });
    };
    let logout = () => {
        return new Promise((resolve, reject) => {
            cookieJs.del(".XianAUTH");
            cookieJs.del(".XianROLE");
            cookieJs.del(".XianINFO");
            sent({ method: 'GET', url: 'api/sys/quit', timeout: 4e3}).then( resolve, reject )
        });
    };
    return {
        sent: sent,
        logout: logout
    }
}
exports = module.exports = $ajax;